iT邦幫忙

2024 iThome 鐵人賽

DAY 3
0
佛心分享-刷題不只是刷題

Ruby刷題:沒那麼痛苦的痛苦面具系列 第 3

DAY 3:Two Sum 每個人的easy第一題!

  • 分享至 

  • xImage
  •  

(o´▽`o)ノ
嗨,我是wec,今天是Day 3。

🔎 題目難度與描述

難度:EASY

題目描述:

給定一個整數數組 nums 和一個目標值 target,請在這個數組中找到兩個和為目標值的數字,並返回它們的索引。

  1. 可以假設每種輸入只會對應一個答案。
  2. 不能重複使用這個數組中同樣的元素。

🔎 解題思路&程式碼

1️⃣ 暴力拆解o(`^´*)o💥

第1步: 直接先依序遍歷nums中的所有數字。
第2步: 然後對每個數字,檢查它和後面所有的數字相加後是不是等於我們要的結果。
程式碼:

def two_sum(nums, target)
  (0...nums.length).each do |i|
    ((i + 1)...nums.length).each do |j|
      return [i, j] if nums[i] + nums[j] == target
    end
  end
end

2️⃣ 雜湊表Hash Map

第1步: 遍歷nums中的所有數字,並把他們與他們的索引(位置)儲存到雜湊表裡。
第2步: 每次看到新數字就算一下「如果這個數字和另一個數字加起來要等於target,那另一個數字是誰?」
第3步: 檢查另一數字是不是已經被存在雜湊表裡,如果是,就代表已經找到這兩數字了。
第4步: return兩個數字的索引。
程式碼:

def two_sum(nums, target)
  hash = {}
  nums.each_with_index do |num, index|
    complement = target - num
    if hash[complement]
      return [hash[complement], index]
    end
    hash[num] = index
  end
end

🔎 總結

時間複雜度比較

暴力拆解法: 時間複雜度為O(n²)
雜湊表: 時間複雜度為O(n)
➡️ 雜湊表雖然步驟看起來比較多一點,但時間複雜度可是遠遠勝過暴拆法ㄛ!雖然暴拆法也可以解決問題,不過如果遇到大組數時就毫無效率可言了๑•̀ㅂ•́)و✧。

那麼,以上就是今天的內容!

相信IT人動腦時都要吃點東西,所以今天邊寫邊吃鹹蛋黃酥跟柚子。
✧・゚祝大家中秋快樂!⋆⁺₊⋆ 🌕⋆⁺₊⋆
明天要說:Ruby精選刷題!練等要先從easy開始II(>∀・)⌒☆


上一篇
DAY 2:Ruby的個人檔案&優缺點!
下一篇
DAY 4:Merge Two Sorted Lists 每個人的easy第二題!
系列文
Ruby刷題:沒那麼痛苦的痛苦面具30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言